home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / MPW_TOOL / TOOLS / TOOLS_WI / ICON_8 / ICONX_FO / RSWITCH.A < prev    next >
Text File  |  1990-03-02  |  1KB  |  63 lines

  1. *
  2. *  Co-expression context switch for Macintosh Icon
  3. *
  4.     STRING    C
  5.     PRINT    LITS
  6.     CASE    OBJ
  7.  
  8.     PRINT    OFF
  9.     INCLUDE    'SysEqu.a'
  10.     PRINT    ON
  11.     
  12.     IMPORT    interp,syserr
  13.  
  14.     SEG    'rswitch'
  15.  
  16. coswitch PROC    EXPORT
  17.  
  18. cs_regs    REG    D2-D7/A2-A7    ;These 12 registers get saved
  19.                 ;  on co-expression switch
  20. cs_nregs EQU    12        ;Number of registers saved
  21.  
  22. ;
  23. ;  Save registers of the co-expression being deactivated.
  24. ;
  25.     MOVE.L    4(SP),A0    ;Get address of old task's registers
  26.     MOVE.L    8(SP),A1    ;Get address of new task's registers
  27.     ADD.L    #cs_nregs*4,A0    ;Bump to end of area for backward move
  28.     MOVEM.L    cs_regs,-(A0)    ;Save registers
  29.     TST.L    12(SP)        ;Check whether this is first activation
  30.     BNE.S    not_first    ;Jump if not first
  31. ;
  32. ;  Come here for co-expression's first activation.  Set the stack
  33. ;  pointer to its stack and call interp.
  34. first
  35.     MOVE.L    #0,StkLowPt    ;Disable Mac's "stack sniffer"
  36.     MOVE.L    (A1),SP        ;Get new stack pointer
  37.     MOVE.L    #0,-(SP)    ;Set up args for interp
  38.     MOVE.L    #0,-(SP)    ; ...
  39.     JSR    interp        ;Call interp
  40.     ADD.L    #8,SP        ;Pop args off stack
  41. ;
  42. ;  We should never get here, but just in case ...
  43. ;
  44.     PEA    #'interp() returned in coswitch'
  45.     JSR    syserr        ;System error
  46. ;
  47. ; Come here if not the first activation.  Restore registers and return.
  48. ;
  49. not_first
  50.     MOVEM.L    (A1)+,cs_regs    ;Restore registers
  51.     RTS            ;Return
  52.  
  53. ;
  54. ;  This routine is called at the end of an Icon run.  It re-enables
  55. ;  the "stack sniffer".
  56. ;
  57. ResetStack PROC    EXPORT
  58.  
  59.     MOVE.L    SP,StkLowPt
  60.     RTS
  61.  
  62.     END
  63.